package cn.simon.free.redis.jedis.sorted.set;

import java.util.List;

/**
 * redis - sorted set 类型,专用接口
 *
 * @author simon
 * @date 2021/5/28 11:09
 * @copyright:
 * @modifier
 * @motto a no talent, people who have to study hard
 */
public interface JedisSortedSet {

    /**
     * 向有序集合添加一个或多个成员，或者更新已存在成员的分数
     *
     * @param key
     * @param score
     * @param value
     * @return
     */
    Boolean zAdd(String key, Long score, String value);

    /**
     * 获取有序集合的成员数
     *
     * @param key
     * @return
     */
    Long zCard(String key);

    /**
     * 计算在有序集合中指定区间分数的成员数
     *
     * @param key
     * @param min
     * @param max
     * @return
     */
    Long zCount(String key, Long min, Long max);

    /**
     * 对有序集合中指定成员的分数加上增量 increment
     *
     * @param key
     * @param member
     * @param score
     * @return
     */
    Double zInCrBy(String key, String member, Double score);

    /**
     * 通过索引区间返回有序集合指定区间内的成员
     *
     * @param key
     * @param start
     * @param stop
     * @return
     */
    List<Object> zRange(String key, Long start, Long stop);

    /**
     * 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排
     *
     * @param key
     * @param min
     * @param max
     * @return
     */
    List<Object> zrRangeByScore(String key, Long min, Long max);

    /**
     * 返回有序集合中指定成员的索引
     *
     * @param key
     * @param member
     * @return
     */
    Long zRank(String key, String member);

    /**
     * 移除有序集合中的一个或多个成员
     *
     * @param key
     * @param member
     * @return
     */
    Long zRem(String key, String... member);

    /**
     * 移除有序集合中给定的排名区间的所有成员
     *
     * @param key
     * @param start
     * @param stop
     * @return
     */
    Long zRemRangeByRank(String key, Long start, Long stop);

    /**
     * 移除有序集合中给定的分数区间的所有成员
     *
     * @param key
     * @param min
     * @param max
     * @return
     */
    Long zRemRangeByScore(String key, Long min, Long max);

    /**
     * 返回有序集中指定区间内的成员，通过索引，分数从高到低
     *
     * @param key
     * @param start
     * @param stop
     * @return
     */
    List<Object> zRevRange(String key, Long start, Long stop);

    /**
     * 返回有序集中指定分数区间内的成员，分数从高到低排序
     *
     * @param key
     * @param min
     * @param max
     * @return
     */
    List<Object>  zRevRangeByScore(String key, Long min, Long max);

    /**
     * 返回有序集合中指定成员的排名，有序集成员按分数值递减(从大到小)排序
     *
     * @param key
     * @param member
     * @return
     */
    Long zRevRank(String key, String member);

    /**
     * 返回有序集中，成员的分数值
     *
     * @param key
     * @param member
     * @return
     */
    Double zScore(String key, String member);

    /**
     * 迭代有序集合中的元素（包括元素成员和元素分值）
     *
     * @param key
     * @param pattern
     * @param count
     * @return
     */
    Object zScan(String key, String pattern, Long count);


}
